package com.zs.controller;

import pojo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Arrays;

@ResponseBody
@Controller
@RequestMapping("/param")
public class ParamController {
/*
* 方法1： 直接接收， 在形参列表声明对应参数名称和类型的变量即可  即： 变量名=参数名称  类型一致
*       细节：如果不传递，赋值null  推荐使用包装数据类型，不要使用基本数据类型！
*      /param/data?account=zs&age=18
* */
    @GetMapping("/data")
    public String data(Integer age, String account){
        System.out.println("age:"+age+" account:"+account);
//        System.out.println("ParamController.data");
        return account + age;
    }
/*
* 方法2： 使用RequestParam注解
*      场景： 1 参数名和形参名不同 @RequestParam("参数名称") 形参名称
*            2 约定必须传递 @RequestParam(required=false) 形参名称
*           2 默认值  @RequestParam(value="参数名称",defaultValue="默认值") 形参名称
*      /param/data1?account=zs&age=18
*
*
*
*
*
* */
    @GetMapping("/data1")
    public String data1(@RequestParam(required = true) Integer age,
                        @RequestParam(value = "username") String account,
                        @RequestParam(defaultValue = "nan") String gender){
        System.out.println("age:"+age+" account:"+account + " gender:"+gender);
        return account + age;
    }

/*
* 方法 3 使用实体类接收参数（开发最常用！！！）
*       在形参列表生命一个对应的类型（属性名和参数名一致） 的对象变量即可
*       细节： 实体类的属性名必须和参数名一致才能接收，如果要设置默认值 属性名=默认值
*              少传走默认值或者null || 多传值没有就不接收！！！
* http://localhost:8080/param/data2?name=zs&age=18
* */
    @GetMapping("/data2")
    public String data2(Student student){
        System.out.println(" student:"+student);
        return student.toString();
    }

/*
*  方法4 一名多值 key=value&key=value 你的爱好
*   http://localhost:8080/param/data3?hbs=mlx&hbs=yinyue&hbs=xiaoshuo&hbs=yundong
*   猜测： 集合或者数组
*   注意 必须添加@RequestParam String[] hbs
*
*
* */
//    @GetMapping("/data3")
//    public String data3(@RequestParam List<String> hbs){
//        for (String hb:hbs){
//            System.out.println("hbs: " + hb);
//        }
//        System.out.println("hbs: " + hbs);
//        return hbs.toString();
//    }
        @GetMapping("/data3")
    public String data3(@RequestParam String [] hbs){
        for (String hb:hbs){
            System.out.println("hbs: " + hb);
        }
        System.out.println("hbs: " + Arrays.toString(hbs));
        return Arrays.toString(hbs);
    }

}
